Large Receive Offload (LRO) has become a feature on almost all network adapters or network interface controllers (NICs). This feature is typically turned on for end nodes terminating TCP traffic in order to get a boost in throughput to the application terminating the connection on that node. However, blindly forwarding a large, LRO aggregated packet would require downstream fragmentation of packets, leading to performance degradation. Furthermore, traffic being forwarded out of a host machine must comply with Maximum Segment Size (MSS), but MSS is a parameter that is visible only on the TCP layer and not available to a forwarding VM. Performing LRO aggregation on forwarded traffic would therefore likely to create oversized packets that exceed the MSS requirement and results in fragmentation.
In most NICs, LRO is a Boolean feature that is simply turned on or off. However, a host machine in a network virtualization environment can host one or more virtual machines (VMs), some of which may be forwarding traffic rather than terminating traffic. In some host machines, a VM may terminate some types of traffic while forwarding other types of traffic. In order to avoid fragmentation of packets on forwarded traffic, many host machines in network virtualization environment simply elect to turn off the LRO feature in the NIC.
What is needed is a host machine that is able to fully utilize the LRO capability of its NIC for maximizing throughput and performance. Such a host machine should be able to enable LRO aggregation on traffic being terminated by a VM while disabling LRO aggregation on traffic being forwarded by a VM. Such a host machine should also be able to maximize throughput even on forwarded traffic by LRO aggregation without causing unnecessary fragmentation downstream by violating the MSS requirement.